全文索引/全文搜索
概述
全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引擎生成和维护的。生成全文索引的过程不同于生成其他类型的索引。全文引擎并非基于特定行中存储的值来构造 B 树结构,而是基于要编制索引的文本中的各个标记来生成倒排、堆积 且压缩的索引结构。
- 全文索引是针对数据表,只能对表创建全文索引,不能对数据库创建全文索引。
- 每个数据库可以不包含全文目录或包含多个全文目录,一个全文目录可以包含多个全文索引,但一个全文索引只能用于构成一个全文目录。
- 一个数据表只能创建一个全文索引,一个全文索引可以包含多个字段。
- 创建全文索引的表必须要有一个唯一的非空索引,并且这个唯一的非空的索引只能是一个字段,不能是组合字段。
- 每个表只允许有一个全文索引。
- 可以对以下类型的列创建全文索引:char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 和 varbinary(max),从而可对这些列进行全文搜索。对数据类型为 varbinary、varbinary(max)、image或xml的列创建全文索引需要您指定类型列,类型列是用来存储每行中文档的文件扩展名(.doc、.pdf、xls 等)的表列。
注意:全文搜索是 SQL Server 数据库引擎的一个可选组件, 如果你在安装 SQL Server 时没有选择全文搜索,请再次运行 SQL Server 安装程序来添加它。
如果已安装了全文搜索组件,可在服务中查看对应的服务是否有运行:
可以使用以下查询语句来查看对应的数据库是否已开启全文搜索:
SELECT DATABASEPROPERTY('{DatabaseName}', 'isfulltextenabled');
如果返回结果是 0,可以使用以下脚本进行启用:
全文搜索查询与 LIKE 谓词的对比
LIKE与全文搜索不同,LIKE仅对字符模式有效。另外,不能使用LIKE来查询格式化的二进制数据。此外,对大量非结构化的文本数据执行LIKE查询要比对相同数据执行同样的全文查询慢得多。对数百万行文本数据进行的LIKE查询可能需要几分钟的时间才能返回结果;而对于同样的数据,全文查询只需要几秒甚至更少的时间,具体取决于返回的行数。